home *** CD-ROM | disk | FTP | other *** search
- ; GETTIM.ASM
- ;
- ; Author: M. Steven Baker
- ; Date: July 29, 1988
- ;
- ; GETTIM and GETDAT routines for SVS FORTRAN (only)
- ; must be called with INTEGER*4 arguments
- ;
- ; FORTRAN CODE TO RUN THIS:
- ;; EXTERNAL GETTIM
- ;; EXTERNAL GETDAT
- ;; INTEGER IHR,IMIN,ISEC,IS100
- ;; INTEGER IMON,IDAY,IYR
- ;; CALL GETDAT(IYR,IMON,IDAY)
- ;; CALL GETTIM(IHR,IMIN,ISEC,IS100)
- ;; END
- ;
- ; Written for the SVS assembler (ASM68K.E20)
- ; by M. Steven Baker (Technical Editor -- Programmer's Journal)
- ;
- ; note: since dumb SVS assembler doesn't support
- ; EXTB.L D0
- ; we use
- ; ANDI #$FF,D0
- ; EXT.L D0
- ;
- ;
- ; NOTE:
- ; USE WITH SVS VERSION 2.8 ONLY. USE WITH SVS VERSION 2.6
- ; REQUIRES THAT THE +e(?? C calling convention)
- ; COMPILER SWITCH BE USED.
- ;
- global getdat,gettim
- ;
- ; return date in MM/DD/YY format
- ;
- getdat MOVEQ #27,D0 ; GET DATE
- TRAP #14 ; D0=YYYY:MM:DD
- MOVE.L D0,D1 ; SAVE REGISTER
- MOVE.L 8(SP),A0 ; GET POINTER TO ARGUMENT
- ASR.W #8,D0 ; SHIFT IN MONTH
- EXT.L D0 ; extend to a long word
- MOVE.L D0,(A0) ; store month
- ;
- MOVE.L D1,D0 ; GET YEAR
- SWAP D0 ; INTO LOW WORD
- EXT.L D0 ; extend to a long word
- MOVE.L 4(SP),A0 ; GET POINTER TO ARGUMENT
- MOVE.L D0,(A0) ; store year
- ;
- CLR.L D0 ; clear register
- MOVE.B D1,D0 ; get day
- MOVE.L 12(SP),A0 ; GET POINTER TO ARGUMENT
- MOVE.L D0,(A0) ; store day
- RTS ; just return for 2.8
-
- ; RTD #12 ; RETURN AND DEALLOCATE PARAMETERS for 2.6
- ;
- ; return time in HH:MM:SS format
- ;
- gettim MOVEQ #28,D0 ; GET TIME
- TRAP #14 ; D0=HH:MM:SS:xx
- MOVE.L D0,D1 ; SAVE REGISTER
- SWAP D0 ; get hour to low word
- ASR.W #8,D0 ; SHIFT IN hour
- EXT.L D0 ; extend to a long word
- MOVE.L 4(SP),A0 ; GET POINTER TO ARGUMENT
- MOVE.L D0,(A0) ; store hour
- ;
- MOVE.L D1,D0 ; now get minutes
- SWAP D0 ; INTO LOW WORD
- ANDI #$FF,D0 ; screen out all but low byte
- EXT.L D0 ; extend to a long word
- MOVE.L 8(SP),A0 ; GET POINTER TO ARGUMENT
- MOVE.L D0,(A0) ; store year
- ;
- MOVE.L D1,D0 ; now get seconds
- ASR.W #8,D0 ; SHIFT seconds into low byte
- EXT.L D0 ; extend to a long word
- MOVE.L 12(SP),A0 ; GET POINTER TO ARGUMENT
- MOVE.L D0,(A0) ; store seconds
- ;
- MOVE.L D1,D0 ; now get 1/100 seconds
- ANDI #$FF,D0 ; screen out all but low byte
- EXT.L D0 ; extend to a long word
- MOVE.L 16(SP),A0 ; GET POINTER TO ARGUMENT
- MOVE.L D0,(A0) ; store 1/100 seconds
- RTS ; just return for 2.8
- ;
- ; RTD #16 ; return and deallocate for 2.6
- ;
- END
-